package cn.iocoder.yudao.module.infrastructure.wechat.service;

import cn.iocoder.yudao.framework.tenant.core.util.TenantUtils;
import cn.iocoder.yudao.module.api.infrastructure.wechat.enums.WxTempateSceneEnum;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * 微信小程序订阅消息
 *
 * @author yshop
 * @author 山野羡民
 */
@Slf4j
@Service
public class WechatSubscribeMessageService extends WechatBaseMessageService {

    /**
     * 支付成功通知
     *
     * @param userId 用户编号
     * @param shopName 店铺名称
     * @param productName 产品名称
     * @param tradeNo 交易单号
     */
    public void paySuccessNotice(Long userId, String shopName, String productName, String tradeNo) {
        TenantUtils.executeIgnore(() -> {
            Map<String, String> map = new HashMap<>();
            map.put("thing2", productName);
            map.put("time3", new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss").format(new Date()));
            map.put("thing4", shopName);
            map.put("thing5", REMARK);
            sendWxMaSubscribeMsg(userId, WxTempateSceneEnum.PAY_SUCCESS, "/pages/components/pages/orders/detail?tradeNo=" + tradeNo, map);
        });
    }

    /**
     * 退款成功通知
     *
     * @param userId 用户编号
     * @param tradeNo 交易单号
     * @param price 金额
     * @param time 时间
     */
    public void refundSuccessNotice(Long userId, String tradeNo, String price, String time) {
        TenantUtils.executeIgnore(() -> {
            Map<String, String> map = new HashMap<>();
            map.put("first", "您的订单退款申请被通过，钱款将很快还至您的支付账户。");
            map.put("keyword1", tradeNo);
            map.put("keyword2", price);
            map.put("keyword3", time);
            map.put("remark", REMARK);
            sendWxMaSubscribeMsg(userId, WxTempateSceneEnum.REFUND_SUCCESS, "/order/detail/" + tradeNo, map);
        });
    }

    /**
     * 发货成功通知
     *
     * @param userId 用户编号
     * @param tradeNo 交易单号
     * @param deliveryName 快递公司
     * @param deliveryNo 快递单号
     */
    public void deliverySuccessNotice(Long userId, String tradeNo, String deliveryName, String deliveryNo) {
        TenantUtils.executeIgnore(() -> {
            Map<String, String> map = new HashMap<>();
            map.put("first", "亲，宝贝已经启程了，好想快点来到您身边。");
            map.put("keyword2", deliveryName);
            map.put("keyword1", tradeNo);
            map.put("keyword3", deliveryNo);
            map.put("remark", REMARK);
            sendWxMaSubscribeMsg(userId, WxTempateSceneEnum.DELIVERY_SUCCESS, "/order/detail/" + tradeNo, map);
        });
    }

}
